#include "func.h"

#define N 10
#define swap(a,b) {int temp;temp=a;a=b;b=temp;}

//以右侧为分隔值
int partition(int arr[],int left,int right)
{
    int i,k;//k始终指向比分割值小的元素，要放的位置
    i=k=left;
    for(i;i<N-1;i++)
    {
        if(arr[i]<arr[right])
        {
            swap(arr[i],arr[k]);
            k++;
        }
    }
    swap(arr[k],arr[right]);
    return k;
}

void arr_quick(int arr[],int left,int right)
{
    int pivot;
    if(left<right)
    {
        pivot=partition(arr,left,right);
        arr_quick(arr,left,pivot-1);
        arr_quick(arr,pivot+1,right);
    }
}

int compar(const void *p1, const void *p2)
{
    int *pleft=(int *)p1;
    int *pright=(int *)p2;
    if(*pleft>*pright)
    {
        return 1;
    }else if(*pleft<*pright){
        return -1;
    }else{
        return 0;
    }
}

int main()
{
    //生成随机数，并存储在a[i]中
    srand(time(NULL));
    int i,j,a[100];
    for(i=0;i<N;i++)
    {
        a[i]=rand()%100;
    }

    //打印
    for(i=0;i<N;i++)
    {
        printf("%-3d",a[i]);
    }
    printf("\n");

    //快排、自己写
    // arr_quick(a,0,N-1);
    //快排，调用qsort
    qsort(a,N,sizeof(int),compar);//compar为比较规则

    //打印
    for(i=0;i<N;i++)
    {
        printf("%-3d",a[i]);
    }
    printf("\n");


    return 0;
}